home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Applications / ExerciseLog1.09 / ExerciseLog1.09 / stack_-1.xml < prev    next >
Extensible Markup Language  |  1994-05-03  |  28KB  |  65 lines

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE stack PUBLIC "-//Apple, Inc.//DTD stack V 2.0//EN" "" >
  3. <stack>
  4.     <name>in.09</name>
  5.     <id>-1</id>
  6.     <cardCount>42</cardCount>
  7.     <cardID>4596</cardID>
  8.     <listID>2892</listID>
  9.     <cantModify><false /></cantModify>
  10.     <cantDelete><false /></cantDelete>
  11.     <cantAbort><false /></cantAbort>
  12.     <cardSize>
  13.         <width>512</width>
  14.         <height>342</height>
  15.     </cardSize>
  16.     <script>-- To the interested reader: obviously you know enough about HyperCard-- to have found this script. Look around as you wish, but-- please be kind enough not to mess up this stack.-- It is protected well enough against accidental damage,-- but I make no guarantees about its functioning if you-- start modifying scripts left and right.-- Thanks!----------------------- About this Stack ------------------------------ HC Exercise Log for the Macintosh,--                 by Maurits van der Veen.---- Version: 1.09 (3 May 1994).-- Copyright ¬© 1993,1994 by the author.-- Shareware sports log program.-- Features: - quick and easy workout-entry format--           - automatic calculation of pace, totals, etc.--           - tally generation with many different options--           - importing and exporting of workouts and distance totals.-- Shareware fee: $8 (entitles you to future upgrades by e-mail)-- Send check to: Maurits van der Veen--                Department of Government--                Harvard University--                Cambridge, MA 02138-- Please also send me e-mail (maurits@husc.harvard.edu)-- when you send your check, to speed up the registration process.-- Changes in different versions:-- 1.09: - made compatible (I hope) with different-language systems--       - bug fixes in totals calculation and weekly log section-- 1.08: - allowed carry-over in tallying cum. distance & time--       - fixed small bug in pace display-- 1.07a:- changed pace/time/dist calculation to remove rounding errors-- 1.07: - redesigned global info card; now allows importing too--       - bug-fix in totals calculation-- 1.06: - running total at bottom now includes time.-- 1.05: - associated more info w. common workouts--       - expanded workout search functions-- 1.04: - fixed bug in change workout date function-- 1.03: - fixed bug in Help printing--       - replaced some shared-text fields by background--         graphics, to make display less system-dependent-------------------------------- XFCNs --------------------------------- This stack contains the following external functions:-- FileName XFCN 1.3.2--  - syntax: get FileName(fileType,prompt)--  - used to get name of log to import workouts from,--    and data file to import from or export to--  - ¬© Steve Maller, 1989; ALink MALLER1-- NewFileName XFCN--  - syntax: get NewFileName(prompt,suggestedName)--  - used to get name for blank log or new datafile to create--  - ¬© Steve Maller, 1988; ALink MALLER1-- FullHPop XFCN 1.3--  - syntax: get FullHPop(<menu>[,<loc>][,<selected item>]--    [,<Font[,size]>][,<checkMark>][,<sub owner select>][,"fastest"])--  - used for all popup menus in the stack--  - ¬© Fr√©d√©ric Rinaldi, 1991; ALink RINALDI1-- FullReplace XFCN 1.0--  - syntax: get FullReplace(<input>,<search pattern>--                            [,<replace pattern>[,<all>[,<offset>]]])--  - used to convert containers from items to lines and back--  - ¬© Fr√©d√©ric Rinaldi, 1991; ALink RINALDI1-- FullSort XFCN 2.7--  - syntax: get FullSort( <text> [,"s=<sep>"] [,"t=a|n|d|i|u"]--    [,"d=a|d|r|l"] [,"c=char x|word x|item x[ to y]"]  [,<sort list>])--    where t=searchtype, d=direction--  - used to sort global lists--  - ¬© Fr√©d√©ric Rinaldi, 1991; ALink RINALDI1-- ListSelect XFCN 4.1--  - syntax: get ListSelect(<mode>,<list>[,"s=#[,#]"][,"NoDoubleClick"]--    [,prompt][,OK][,Cancel][,loc|Rect][,sep][,DLOG ID][font[,size]])--  - used to select workout types on tally cards.--  - ¬© Fr√©d√©ric Rinaldi, 1991; ALink RINALDI1------------------------- Global variables ---------------------------- The following global variables are used in this stack:-- allEfforts     - itemlist of all effort levels possible-- allEquipment   -    ,,    ,,     equipment selectable in popup menus-- allSports      -    ,,    ,,     sports         ,,         ,,    ,,-- allTypes       -    ,,    ,,     workout types  ,,         ,,    ,,-- cardUpdated    - used on workout cards for correct total and--                  workout types displays-- commonExtras   - itemlist of distances,sports,workout types, and--                  efforts associated with each common workout-- commonWorkouts - itemlist of regular workouts-- currentList    - used to contain current state of global info on--                  the global info settings card-- currentTypes   - a single line in allTypes containing possible--                  workouts for the currently selected sports-- dayNames       - names of the weekdays, from Monday to Sunday--                  (in the language of the system), as items-- defaultUnits   - itemlist of default units to use for distance,--                  time, pace, and weight-- developer      - set to true to allow all menu commands-- firstDayOfWeek - day on which to start from 0 in summing--                  weekly total distances-- oldlevel       - remember userlevel which applied on entering stack--                  to restore when we leave-- oldList        - used to remember previous state of global info--                  (cf. currentList)-- scriptCaller   - used to allow scripts to do things the user can't------------------------- Standard Handlers -------------------------on openStackglobal oldlevel,scriptCaller,developerput the userlevel into oldlevelset the userlevel to 5put false into scriptCaller -- default value is falseput false into developer    -- ibid.initGlobals               -- initialize globals as appropriate.set numberFormat to ".##" -- don't display too many trailing decimalsmakeLogMenu               -- prepare for stack to run: add Log menu-- customize Help menu item in Go menuset menuMsg of menuItem "Help" of menu "Go" to¬¨"jumpToCard (" & quote & "Help" & quote & ")"hide message box          -- clean up look of screenend openStackon closeStackglobal oldlevel,commonWorkouts,commonExtrasif there is a menu "Log" then delete menu "Log"-- restore Help menu item to its original stateset menuMsg of menuItem "Help" of menu "Go" to empty-- update fields that store common workout informationput commonWorkouts into card field "Workouts" of card "Global Info"put commonExtras into card field "Extras" of card "Global Info"if (the freesize of this stack > the size of this stack/10) thendoMenu "Compact Stack" -- compact if more than 10% freeend ifset the userlevel to oldlevelend closeStackon openBackgroundsetCheckmark trueend openBackgroundon closeBackgroundsetCheckmark falseend closeBackground-- Try to prevent user from making nasty mistakeson domenu choiceglobal scriptCaller,developerif choice is in "Message Compact Stack Quit Hypercard" thenpass doMenuelse if developer thenpass domenu -- developer can do anythingelse if (choice is not "Back") and¬¨(choice is in "Delete Stack... Background Icon...") thenbeep -- don't want these actions to be doneelse if (choice is not "Back") and¬¨(choice is in "New Card Copy Card Cut Card Clear Card" &&¬¨"New Button Copy Button Paste Button Clear Button" &&¬¨"New Field Copy Field Paste Field Clear Field New Background") thenif scriptCaller thenpass doMenu -- only scripts can do theseelse beepelse pass domenu -- other choices are fairly harmlessend domenu-- make arrowkeys function elegantlyon arrowkey whichif which = left thenvisual wipe rightgo prevelse if which = right thenvisual wipe leftgo nextend ifend arrowKey-------------------- Stack Setup & Control Handlers ---------------------- Display a popup menu with as choices the items in menuItems-- Put the selected option into field theField.on doPopup theField,menuItemsget FullHPop (menuItems)if it is not empty then do "put item 1 of it into" && theFieldend doPopup-- Initialize global variables from "Global Info" cardon initGlobalsglobal firstDayOfWeek,commonWorkouts,commonExtras,defaultUnitsglobal allSports,allTypes,allEfforts,allEquipment,dayNamesset cursor to busyset lockMessages to truelock screengo card "Global Info" -- get value of some global variable thereput getDayNames() into dayNamesif card field "startDay" is not in dayNames then-- different language from last time stack was usedput dayNames into card field "dayNames"put item 1 of dayNames into card field "startDay"end ifput card field "startDay" into firstDayOfWeekput card field "Sports" into allSportsput card field "Types" into allTypesput card field "Efforts" into allEffortsput card field "Equipment" into allEquipmentput card field "Workouts" into commonWorkoutsput card field "Extras" into commonExtrasput card field "DistanceUnit" into item 1 of defaultUnitsput card field "TimeUnit" into item 2 of defaultUnitsput longToShortPace(card field "PaceUnit") into item 3 of defaultUnitsput card field "WeightUnit" into item 4 of defaultUnitsgo back -- return where we came fromset lockMessages to falseunlock screenend initGlobals-- Create an extra menu in the menubar for this stackon makeLogMenu-- first replace old Log menu if necessaryif there is a menu "Log" then delete menu "Log"create menu "Log"-- 1. About messageput "About this stack‚Ķ" into menu "Log" with menuMsg "stackInfo"-- 2. Navigation messagesput "--" after menu "Log"put "Title Card" after menu "Log"¬¨with menuMsg "jumpToCard (" & quote & "Title Card" & quote & ")"put "Workouts" after menu "Log"¬¨with menuMsg "jumpToCard (" & quote & "Workouts" & quote & ")"put "Weekly Log" after menu "Log"¬¨with menuMsg "jumpToCard (" & quote & "Weekly Log" & quote & ")"put "Tallies" after menu "Log"¬¨with menuMsg "jumpToCard (" & quote & "Tallies" & quote & ")"put "Global Info" after menu "Log"¬¨with menuMsg "jumpToCard (" & quote & "Global Info" & quote & ")"put "Help" after menu "Log"¬¨with menuMsg "jumpToCard (" & quote & "Help" & quote & ")"-- 3. Check off current location in menusetCheckMark trueend makeLogMenu-- Provide stack info & play part of Wilhelmus (Dutch nat'l anthem)on stackInfoput "dq gq gq ae be c5e a4e bq ah ae be c5q b4q ae ge aq gh" into tuneplay "Harpsichord" tempo 200 tuneput line 11 to 15 of the script of this stack into aboutMessagerepeat with x = 1 to 5delete char 1 to 3 of line x of aboutMessageend repeatanswer aboutMessageend stackInfo-- Jump to card selected if a special card, or the first card of-- the background selected otherwise, and check off the destination-- in the Log menu.on jumpToCard destNameif there is a bkgnd destName thengo card 1 of bkgnd destNameelse go card destNameend jumpToCard-- set (or unset) checkMark for current location in Log menuon setCheckMark boolean -- true to check, false to uncheckif there is a menu "Log" thenif the short name of this bkgnd = "Special" thenset checkMark of menuItem (the short name of this card)¬¨of menu "Log" to booleanelseset checkMark of menuItem (the short name of this bkgnd)¬¨of menu "Log" to booleanend ifend ifend setCheckMark-------------------------- Utility Functions ----------------------------- returns line number clicked on of any scrollable fieldfunction clickLinereturn (trunc (((scroll of the target) + (item 2 of the clickLoc)-¬¨(top of the target)) div the textHeight of the target) + 1)end clickLine-- returns line number clicked on of any non-scrollable fieldfunction clickLine2return (trunc(((item 2 of the clickLoc) - (top of the target))¬¨div the textHeight of the target) + 1)end clickLine2-- remove all blank lines at the front of aContainerfunction stripLeadingBlanks aContainerrepeat while line 1 of aContainer is emptydelete line 1 of aContainerend repeatreturn aContainerend stripLeadingBlanks-- find first workout on or after the date given (use binary search)-- return the card number of the first workout found; empty otherwisefunction findFirstInRange startDateput the number of cards of bkgnd "Workouts" into nrCardsput nrCards/2 into jumpDistput (the number of card 1 of bkgnd "Workouts") -1 into bkgndOffsetput bkgndOffset + trunc(jumpDist) into curCardadd bkgndOffset to nrCardsrepeatset cursor to busyif jumpDist > 1 thenput jumpDist/2 into jumpDistelse put 1 into jumpDist -- always move at least 1put word 1 of (the short name of card curCard) into thisDateif startDate > thisDate thenif curCard = nrCards then -- have reached end -> failanswer "No workouts in date range."return emptyelse add trunc(jumpDist) to curCardelse if startDate < thisDate thenif curCard = (bkgndOffset+1) thenreturn curCard -- have reached beginning of workout cardselse if startDate >¬¨(word 1 of the short name of card (curCard -1)) thenreturn curCard -- fromDate lies between previous and this cardelse subtract trunc(jumpDist) from curCardelse -- startDate = thisDate: return # of first card of dayreturn (curCard+1-(word 2 of the short name of card curCard))end ifend repeatend findFirstInRange-- scroll fields in fieldList together when user clicks button-- placed over up-arrow of right-most scrolling fieldon simulScroll1 fieldListput the textHeight of item 1 of fieldList into baseLineSizeput the number of items in fieldList into numItemsrepeat until the mouse is upget (scroll of last item of fieldList) - baseLineSizelock screenrepeat with count = 1 to numItemsset scroll of (item count of fieldList) to itend repeatunlock screenend repeatend simulScroll1-- scroll fields in fieldList together when user clicks button-- placed over down-arrow of right-most scrolling fieldon simulScroll2 fieldListput the textHeight of item 1 of fieldList into baseLineSizeput the number of items in fieldList into numItemsrepeat until the mouse is upget (scroll of last item of fieldList) + baseLineSizelock screenrepeat with count = 1 to numItemsset scroll of (item count of fieldList) to itend repeatunlock screenend repeatend simulScroll2-- scroll fields in fieldList together when user drags scroll-box-- or clicks in scroll-bar of right-most scrolling fieldon simulScroll3 fieldListif the selectedField is not empty then exit simulScroll3get the scroll of last item of fieldListif it ‚↠the scroll of first item of fieldList thenlock screenrepeat with count = 1 to (number of items in fieldList - 1)set scroll of (item count of fieldList) to itend repeatunlock screenend ifend simulScroll3-- Completely clear out a tally cardon clearTallyglobal defaultUnitsset the name of this card to empty-- Fields governing the contents of the tallyput "Workouts" into bkgnd field "TypeTitle"put "Current Selections..." into bkgnd field "Selection"put empty into bkgnd field "CurrentSelections"put empty into bkgnd field "From"put empty into bkgnd field "To"newCard -- fill in Effort field-- Fields containing the tally informationput empty into bkgnd field "Date"put empty into bkgnd field "SportColumn"put empty into bkgnd field "TypeColumn"put empty into bkgnd field "EffortColumn"put empty into bkgnd field "Workout"put empty into bkgnd field "Distance"put empty into bkgnd field "Time"put empty into bkgnd field "Comments"-- Fields containing unit namesput item 1 of defaultUnits into bkgnd field "DistUnit"put item 2 of defaultUnits into bkgnd field "TimeUnit"put item 3 of defaultUnits into bkgnd field "PaceUnit"put item 4 of defaultUnits into bkgnd field "WeightUnit"-- Fields associated with 2 variable columns on the rightput empty into bkgnd field "Choice1Name"put empty into bkgnd field "Choice2Name"set the style of bkgnd field "Choice1Name" to "shadow"set the style of bkgnd field "Choice2Name" to "shadow"put empty into bkgnd field "Choice1"put empty into bkgnd field "Choice2"put empty into bkgnd field "Carry1"put empty into  bkgnd field "Carry2"-- Make sure that time, pace, and choice fields are showingif bkgnd field "CommentButton" = "Hide" thensend mouseUp to bkgnd field "CommentButton"end ifend clearTally--------------------- Data Manipulation Handlers -------------------------------------------------- 1. Date Handlers ----------------------------- get the names of the weekdays; different for each languagefunction getDayNamesput "1/1/96" into theDate -- known to be a Mondayrepeat with x = 1 to 7convert theDate to long dateput item 1 of theDate into item x of dayNamesconvert theDate to secondsadd 86400 to theDate -- 86400 = 24*60*60 = # seconds in a dayend repeatreturn dayNamesend getDayNames-- add a number of days (subtract if nrDays is negative)-- to the date variable (in seconds) passed in.-- Input must be in seconds format; output will be alsofunction addDays aDate,nrDaysreturn (aDate+ nrDays*86400)end addDays-- Return, in seconds, the first day of the week in which aDate fallsfunction startOfWeek aDate,firstDayconvert aDate to long daterepeat while item 1 of aDate <> firstDayconvert aDate to secondssubtract 86400 from aDateconvert aDate to long dateend repeatconvert aDate to secondsreturn aDateend startOfWeek-- Return, in seconds, the last day of the week in which aDate fallsfunction endOfWeek aDate,firstDayconvert aDate to secondsadd 86400 to aDateconvert aDate to long daterepeat while item 1 of aDate <> firstDayconvert aDate to secondsadd 86400 to aDateconvert aDate to long dateend repeatconvert aDate to secondsreturn (aDate - 86400)end endOfWeek-- As startOfWeek, except uses global firstDayOfWeekfunction firstDateOfWeek theDateglobal firstDayOfWeekreturn startOfWeek(theDate,firstDayOfWeek)end firstDateOfWeek-- As endOfWeek, except uses global firstDayOfWeekfunction lastDateOfWeek theDateglobal firstDayOfWeekreturn endOfWeek(theDate,firstDayOfWeek)end lastDateOfWeek-- Return, in seconds, the first day of the year in which aDate fallsfunction startOfYear aDateconvert aDate to short date-- strip month and daydelete char 1 to offset("/",aDate) of aDatedelete char 1 to offset("/",aDate) of aDate-- replace by 1/1/put "1/1/" before aDateconvert aDate to secondsreturn aDateend startOfYear-- Return, in seconds, the last day of the year in which aDate fallsfunction endOfYear aDateconvert aDate to short date-- strip month and daydelete char 1 to offset("/",aDate) of aDatedelete char 1 to offset("/",aDate) of aDate-- replace by 1/1/put "12/31/" before aDateconvert aDate to secondsreturn aDateend endOfYear-- Return the name of the day which falls x days after the day givenfunction dayName fromDay,nrDaysglobal dayNamesrepeat with x = 1 to 7if item x of dayNames = fromDay thenreturn (item ((x+nrDays-1) mod 7 +1) of dayNames)exit repeatend ifend repeatend dayName--------------------------- 2. Time Handlers ----------------------------- Given a unit of time measurement and a quantity expressed in-- that unit, return the time in secondsfunction getSeconds unit,quantityif unit = "hours" then-- Get hours out firstput offset(":",quantity) into hoursBreakif hoursBreak = 0 then -- hours only, no minutes or secondsreturn quantity * 3600end ifput (char 1 to (hoursBreak-1) of quantity) * 3600 into Secsdelete char 1 to hoursBreak of quantityelse put 0 into Secs-- Now get minutes output offset(":",quantity) into minutesBreakif minutesBreak = 0 then -- minutes only, no secondsreturn Secs + (quantity * 60)end ifadd (char 1 to (minutesBreak-1) of quantity) * 60 to Secsdelete char 1 to minutesBreak of quantity-- Finally, add secondsreturn Secs + quantityend getSeconds-- Given a number of seconds and a desired time unit,-- convert to a nicely format expression in the appropriate unit.function makeNiceTime Unit,Secsput Secs mod 60 into niceTimeif niceTime = 0 then put empty into niceTimeelseif niceTime < 10 then put 0 before niceTimeput ":" before niceTimeend ifput Secs div 60 into Minsif Unit = "minutes" then put Mins before niceTimeelseput Mins mod 60 into theMinsput Mins div 60 into theHoursif niceTime is empty and theMins = 0 thenput theHours into niceTimeelseput theMins before niceTimeif theMins < 10 then put 0 before niceTimeput theHours & ":" before niceTimeend ifend ifreturn niceTimeend makeNiceTime------------------------- 3. Distance Handlers --------------------------- Convert a distance from one format to another.function convertDistance fromUnit,toUnit,quantityif fromUnit = toUnit thenreturn quantityelsereturn quantity * convertToMeters(fromUnit) / convertToMeters(toUnit)end ifend convertDistance-- Return the multiplier to get from the unit provided to meters.function convertToMeters unitif unit = "miles" then return 1609.343131else if unit = "yards" then return 0.9143995else if unit = "km." then return 1000else return 1end convertToMeters-- As above, for yards.function convertToYards unitif unit = "miles" then return 1760else if unit = "meters" then return 1.093614else if unit = "km." then return 1093.614else return 1end convertToYards-- Given a unit of distance measurement and a quantity expressed in-- that unit, return the distance in metersfunction getMeters unit,quantityreturn quantity * convertToMeters(unit)end getMeters-- As above, for yardsfunction getYards unit,quantityreturn quantity * convertToYards(unit)end getYards--------------------------- 4. Pace Handlers ----------------------------- Convert a pace from one format to another.function convertPace fromUnit,toUnit,quantityif fromUnit = toUnit thenreturn quantityelse-- 1. Convert input pace to meters per second-- 2. Convert meters and seconds to output pacereturn convertToPace(getMetersPerSec(fromUnit,quantity),toUnit)end ifend convertPace-- Convert from meters per second to the desired pace unit.function mpsToPace quantity,paceUnitif paceUnit = "min/m." thenreturn makeNiceTime("minutes",1609.343131/quantity)else if paceUnit = "min/km." thenreturn makeNiceTime("minutes",1000/quantity)else if paceUnit = "m/hr." thenreturn quantity * (3600 / 1609.343131)else -- paceUnit = "km/hr."return quantity * (3600 / 1000)end ifend mpsToPace-- As above, for yards per second.function ypsToPace quantity,paceUnitif paceUnit = "min/m." thenreturn makeNiceTime("minutes",1760/quantity)else if paceUnit = "min/km." thenreturn makeNiceTime("minutes",1093.614/quantity)else if paceUnit = "m/hr." thenreturn quantity * (3600 / 1760)else -- paceUnit = "km/hr."return quantity * (3600 / 1093.614)end ifend ypsToPace-- Given a unit of pace measurement and a quantity expressed in-- that unit, return the pace in meters/secondfunction getMetersPerSec unit,quantityif unit = "min/m." thenreturn 1609.343131 / getSeconds("minutes",quantity)else if unit = "min/km." thenreturn 1000 / getSeconds("minutes",quantity)else if unit = "m/hr." thenreturn (1609.343131/3600) * quantityelse -- unit = "km/hr."return (10/36) * quantityend ifend getMetersPerSec-- As above, for yards/secondfunction getYardsPerSec unit,quantityif unit = "min/m." thenreturn 1760 / getSeconds("minutes",quantity)else if unit = "min/km." thenreturn 1093.614 / getSeconds("minutes",quantity)else if unit = "m/hr." thenreturn (1760/3600) * quantityelse -- unit = "km/hr."return (1093.614/3600) * quantityend ifend getYardsPerSec--------------------------- 5. Weight Handler --------------------------function convertWeight fromUnit,toUnit,quantityif fromUnit = toUnit thenreturn quantityelse if fromUnit = "kg." thenreturn (quantity * 2.20462)else return (quantity / 2.20462)end convertWeight</script>
  17.     <background id="2675" file="background_2675.xml" name="Special" />
  18.     <background id="5793" file="background_5793.xml" name="Weekly Log" />
  19.     <background id="6476" file="background_6476.xml" name="Tallies" />
  20.     <background id="7271" file="background_7271.xml" name="Workouts" />
  21.     <background id="8096" file="background_8096.xml" name="Help" />
  22.     <card id="4596" file="card_4596.xml" marked="false" name="Title Card" owner="2675" />
  23.     <card id="4891" file="card_4891.xml" marked="false" name="" owner="7271" />
  24.     <card id="5387" file="card_5387.xml" marked="false" name="" owner="5793" />
  25.     <card id="6282" file="card_6282.xml" marked="false" name="" owner="6476" />
  26.     <card id="18991" file="card_18991.xml" marked="false" name="Global Info" owner="2675" />
  27.     <card id="7788" file="card_7788.xml" marked="false" name="Help Overview" owner="8096" />
  28.     <card id="8755" file="card_8755.xml" marked="false" name="Help General 1" owner="8096" />
  29.     <card id="8547" file="card_8547.xml" marked="false" name="Help General 2" owner="8096" />
  30.     <card id="9194" file="card_9194.xml" marked="false" name="Help General 3" owner="8096" />
  31.     <card id="9329" file="card_9329.xml" marked="false" name="Help General 4" owner="8096" />
  32.     <card id="9558" file="card_9558.xml" marked="false" name="Help General 5" owner="8096" />
  33.     <card id="9975" file="card_9975.xml" marked="false" name="Help General 6" owner="8096" />
  34.     <card id="10116" file="card_10116.xml" marked="false" name="Help Navigation 1" owner="8096" />
  35.     <card id="10322" file="card_10322.xml" marked="false" name="Help Navigation 2" owner="8096" />
  36.     <card id="10518" file="card_10518.xml" marked="false" name="Help Navigation (3)" owner="8096" />
  37.     <card id="10970" file="card_10970.xml" marked="false" name="Help Title 1" owner="8096" />
  38.     <card id="11197" file="card_11197.xml" marked="false" name="Help Title 2" owner="8096" />
  39.     <card id="11372" file="card_11372.xml" marked="false" name="Help Title 3" owner="8096" />
  40.     <card id="11734" file="card_11734.xml" marked="false" name="Help Title 4" owner="8096" />
  41.     <card id="11935" file="card_11935.xml" marked="false" name="Help Workouts 1" owner="8096" />
  42.     <card id="12281" file="card_12281.xml" marked="false" name="Help Workouts 2" owner="8096" />
  43.     <card id="12356" file="card_12356.xml" marked="false" name="Help Workouts 3" owner="8096" />
  44.     <card id="12746" file="card_12746.xml" marked="false" name="Help Workouts 4" owner="8096" />
  45.     <card id="12906" file="card_12906.xml" marked="false" name="Help Workouts 5" owner="8096" />
  46.     <card id="13161" file="card_13161.xml" marked="false" name="Help Workouts 6" owner="8096" />
  47.     <card id="13528" file="card_13528.xml" marked="false" name="Help Workouts 7" owner="8096" />
  48.     <card id="13625" file="card_13625.xml" marked="false" name="Help Weekly 1" owner="8096" />
  49.     <card id="14058" file="card_14058.xml" marked="false" name="Help Weekly 2" owner="8096" />
  50.     <card id="14246" file="card_14246.xml" marked="false" name="Help Weekly 3" owner="8096" />
  51.     <card id="14565" file="card_14565.xml" marked="false" name="Help Weekly 4" owner="8096" />
  52.     <card id="14781" file="card_14781.xml" marked="false" name="Help Tallies 1" owner="8096" />
  53.     <card id="15089" file="card_15089.xml" marked="false" name="Help Tallies 2" owner="8096" />
  54.     <card id="15188" file="card_15188.xml" marked="false" name="Help Tallies 3" owner="8096" />
  55.     <card id="15490" file="card_15490.xml" marked="false" name="Help Tallies 4" owner="8096" />
  56.     <card id="15768" file="card_15768.xml" marked="false" name="Help Tallies 5" owner="8096" />
  57.     <card id="16030" file="card_16030.xml" marked="false" name="Help Tallies 6" owner="8096" />
  58.     <card id="16331" file="card_16331.xml" marked="false" name="Help Tallies 7" owner="8096" />
  59.     <card id="16390" file="card_16390.xml" marked="false" name="Help Tallies 8" owner="8096" />
  60.     <card id="16842" file="card_16842.xml" marked="false" name="Help Global Info 1" owner="8096" />
  61.     <card id="16990" file="card_16990.xml" marked="false" name="Help Global Info 2" owner="8096" />
  62.     <card id="17195" file="card_17195.xml" marked="false" name="Help Global Info 3" owner="8096" />
  63.     <card id="21749" file="card_21749.xml" marked="false" name="Help Global Info 4" owner="8096" />
  64. </stack>
  65.